생성자 (Constructors)
✒️ 2025-05-15 13:14 내용 수정
객체를 생성할 때 인스턴스 변수를 원하는 값으로 초기화해주는 것
- 클래스로 객체를 생성하면 해당 객체는 메모리에 즉시 생성되지만, 생성된 객체의 모든 인스턴스 변수는 초기화되지 않은 상태다.
- 별도로 초기화하지 않으면 초기값으로 자동 초기화된다.
- 필드(Fields), 변수(Variables)와 상수(Constant)#변수 타입 별 초깃값 참고.
- 생성자는 반환값이 없지만, void 형으로 선언하지 않는다.
- 생성자의 이름은 클래스의 이름과 동일하다.
- 생성자도 메서드의 일종
- 생성자는 new 키워드로 객체를 생성할 때만 호출할 수 있다.
- Java에선 컴파일 시 기본 생성자를 자동으로 추가해준다.
- 인스턴스 변수의 초기화를 클래스 필드에서 바로 할 수 있다.
- 매개 변수를 가지는 생성자를 하나라도 추가했다면 기본 생성자는 자동으로 추가되지 않는다.
- this() 메서드는 생성자 내부에서만 사용할 수 있고, 같은 클래스의 다른 생성자를 호출할 때를 사용한다.
- 호출 시 매개변수가 필요하다면 같이 넣어줘야 한다.
- 첫 줄에서만 사용 가능하다.
- Math, Arrays같이 객체를 생성하지 않고 메서드를 사용할 수 있는 클래스들은 생성자의 접근제한자가 private으로 되어있다.
- 객체를 생성할 필요가 없거나, 다른 클래스의 메서드를 통해서만 필드값을 접근하게 만드는 등의 이유로 생성자를 private으로 만들 수 있다.
- prviate 변수들에 대해 생성자가 Setter 역할을 해줄 수 있다.
- 생성자에는 final 키워드를 붙일 수 없다.
- 제어자#1. final 제어자
1) 접근제한자 클래스이름() {}
2) 접근제한자 클래스이름(매개변수1, 매개변수2, ...) {}
- 제어자#1. final 제어자
public ClassName() {}
public ClassName(var1, var2, ...) {}
public ClassName(variable) {
this(var1, var2, ...); // 다른 생성자를 호출한다
}
public ClassName instanceName = new ClassName();
메서드 오버로딩
같은 이름의 메서드를 중복하여 정의하는 것
- 기본적으로 같은 클래스 내에서는 메서드의 이름을 중복 사용할 수 없다.
- 메서드가 지닌 매개변수의 개수를 다르게 하거나, 개수가 같아도 데이터 타입이 다르면 다른 메서드로 인식된다.
- 받는 매개 변수의 순서를 바꿔도 오버로드가 된다.
- 반환 타입과는 관계가 없다.
- 오버라이딩(Overriding)과 차이점을 잘 알아야 한다.
public ClassName();
public ClassName(int);
public ClassName(double);
public ClassName(int a, String "");